package main

import (
	"fmt"
	"sync"
	"time"
)

/*
  golang并发安全和锁

	1、互斥锁
	互斥锁是传统并发编程中对共享资源进行访问控制的主要手段，它由标准库sync中的Mutex结构体
	类型表示，sync.Mutex类型只有两个公开的指针方法，Lock和Unlock，Lock锁定当前的共享
	资源，Unlock进行解锁
*/

var count = 0
var wg sync.WaitGroup

var mutex sync.Mutex

func test() {
	mutex.Lock()
	count++
	fmt.Println("the count is", count)
	time.Sleep(time.Millisecond)
	mutex.Unlock()
	wg.Done()
}

func main() {
	for i := 0; i < 100; i++ {
		wg.Add(1)
		go test()
	}
	wg.Wait()
}

//go build -race demo66.go
